﻿#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable : 4996)
#pragma warning(disable : 6031)

//LeetCode 26 删除有序数组中的重复项
//https://leetcode.cn/problems/remove-duplicates-from-sorted-array/

//给你一个 升序排列 的数组 nums ，请你 原地 删除重复出现的元素，使每个元素 只出现一次 ，
//返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
//由于在某些语言中不能改变数组的长度，所以必须将结果放在数组nums的第一部分。
//更规范地说，如果在删除重复项之后有 k 个元素，那么 nums 的前 k 个元素应该保存最终结果。
//将最终结果插入 nums 的前 k 个位置后返回 k 。
//不要使用额外的空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

//听课前
//int removeDuplicates(int* nums, int numsSize)
//{
//    int i = 0, j = 0; //双指针
//    int x = nums[0];  //记录，用于与下一个元素判断是否相等
//    int flag = 0;     //标记，默认该元素没有出现过
//    int count = 0;    //记录数组中元素个数
//    while (i < numsSize)
//    {
//        if (flag == 0)
//        {
//            nums[j] = nums[i];
//            x = nums[j];
//            flag++;
//            j++;
//            count++;
//            i++;
//        }
//        else if (nums[i] == x)
//        {
//            i++;
//        }
//        else
//        {
//            flag = 0;
//        }
//    }
//    return count;
//}

//听课后
int removeDuplicates(int* nums, int numsSize)
{
    int src = 1;
    int dest = 0;
    while (src < numsSize)
    {
        if (nums[src] != nums[dest])
        {
            dest++;
            nums[dest] = nums[src];
        }
        src++;
    }
    return dest + 1;
}